package xyz.csmcool.imuser.service;

import xyz.csmcool.imuser.entity.Users;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.csmcool.imuser.entity.vo.*;
import xyz.csmcool.imutil.dto.RoomUserDto;
import xyz.csmcool.imutil.dto.RoomUsersDto;
import xyz.csmcool.imutil.dto.UserDto;
import xyz.csmcool.imutil.webVo.MyPage;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author csmcool
 * @since 2022-07-31
 */
public interface IUsersService extends IService<Users> {

    /**
     * 登陆是否成功
     * @param userLoginVo 前端传输实体
     * @return flag
     */
    Integer isSuccessLogin(UserLoginVo userLoginVo);

    /**
     * 是否登陆成功
     * @param userLoginVo
     * @return
     */
    Users isSuccessLoginAndBackInfo(UserLoginVo userLoginVo);

    /**
     * 注册新用户
     * @param userRegisterVo 用户注册实体
     * @return flag
     */
    Boolean registerNewUser(UserRegisterVo userRegisterVo);

    /**
     * 邮箱是否已经注册
     * @param email 电子邮箱
     * @return flag
     */
    Boolean isSameEmail(String email);

    /**
     * 更新用户密码
     * @param id 用户id
     * @param password 密码
     * @return flag
     */
    Boolean updateUserPassword(Integer id,String password);


    /**
     * 激活邮箱
     * @param email
     * @param code
     * @return
     */
    Boolean activeEmail(String email,String code);

    /**
     * 更新用户信息
     * @param userInfoVo
     */
    void updateUserInfo(UserInfoVo userInfoVo);

    /**
     * 返回房间用户信息
     * @param ids
     * @return
     */
    List<UserDto> selectRoomUser(List<Integer> ids);

    /**
     * 查询用户byname
     * @param roomUserDto
     * @return
     */
    RoomUsersDto selectRoomUserByName(RoomUserDto roomUserDto);


    /**
     * 得到一个人简单的信息;
     * @param id
     * @return
     */
    UserSimpleVo getUserSimpleInfo(Integer id);

    /**
     * 搜索用户
     * @param page
     * @param limit
     * @param userName
     * @param email
     * @return
     */
    MyPage<UserInfosVo> searchUserByNameOrEmail(Long page,Long limit,String userName,String email);

    /**
     * 获取用户详细信息
     * @param uid
     * @param fid
     * @return
     */
    UserDetailsVo getUserDetails(Integer uid,Integer fid);
}
